-- shape_change
-- create by dengc
-- 变身属性
-- 配置说明：prop{propId, shapeId, condition, round}
-- condition配置目前支持-1,0,1,2四种
-- 当需要不马上触发只记录时配置为-1；当允许多次变身时配置为0；前两种兼有配置为2；默认配置为1；

return {
    apply = function(prop, baseValue)
        return prop[3];
    end,

    clear = function (target, prop)
        -- 解释配置条件
        local condition = prop[3];
        local tag = ShapeChangeM.parseCondition(condition);

        -- 多次变身不用还原模型
        if tag == ShapeChangeM.CHANGE_REPEATEDLY or tag == ShapeChangeM.REPEATEDLY_LATER then
            return;
        end

        local shapeId = prop[2];
        local isShowEffect = ShapeChangeM.query(shapeId, "restore_effect") == 1 and true or false;

        -- 抛出变身恢复事件
        EventMgr.fire(event.SHAPE_RESTORE, {["shape_id"] = shapeId, ["show_effect"] = isShowEffect, });
    end,

    record = function(target, prop, path)
        local shapeId = prop[2];
        local condition = prop[3];

        -- 解释配置条件
        local tag = ShapeChangeM.parseCondition(condition);

        -- 是否需要马上触发
        if tag == ShapeChangeM.TRIGGER_LATER or tag == ShapeChangeM.REPEATEDLY_LATER then
            return false;
        end
        
        -- 查询变身信息
        local shapeInfo = ShapeChangeM.query(shapeId);
        
        -- 查找不到配置
        if not shapeInfo then
            return false;
        end

        -- 作用对象不是玩家自己
        if target.type ~= OBJECT_TYPE_USER then
            return false;
        end

        -- 获取当前的出战宠物
        local pet = target:getActivePet();
        if nil == pet then
            return false;
        end

        -- 不是需求变身的宠物
        local userPetId = pet.classId;
        local needId = shapeInfo["class_id"];
        if needId ~= userPetId then
            return false;
        end

        -- 抛出变身事件
        EventMgr.fire(event.SHAPE_CHANGE, {["shape_id"] = shapeId, ["condition"] = tag,});

        return false;
    end
};
